跳到主要内容

常用的 Docker 命令

基本命令

docker version # 查看 docker 版本
docker images # 查看所有已下载镜像,等价于 `docker image ls` 命令
docker container ls # 查看所有容器
docker ps # 查看正在运行的容器
docker image prune # 清理临时的、没有被使用的镜像文件

拉取镜像

docker pull 命令默认使用的 Registry/Hub 是 Docker Hub。当你执行 docker pull 命令而没有指定任何 Registry/Hub 的地址时,Docker 会从 Docker Hub 拉取镜像。

docker search mysql # 查看mysql相关镜像
docker pull mysql:5.7 # 拉取mysql镜像
docker image ls # 查看所有已下载镜像

删除镜像

现在,假设我们要删除我们之前拉取到本地的 mysql 镜像。

通过 docker rmi [image] (等价于 docker image rm [image])可以删除本地的镜像,但在此之前首先要确保这个镜像没有被容器引用。通过我们前面讲的 docker ps 命令即可查看。

删除镜像时可以通过标签名称或者镜像 ID 进行索引(标识)。

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4cd691d9f80 mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Up 12 days 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

可以看到在这个例子中, mysql 镜像正在被 id 为 c4cd691d9f80 的容器引用,我们需要首先通过 docker stop c4cd691d9f80 或者 docker stop mysql 暂停这个容器。

然后查看 mysql 镜像的 ID:

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 f6509bac4980 3 months ago 373MB

最后通过 IMAGE ID 或者 REPOSITORY 名字即可删除指定的镜像。

docker rmi f6509bac4980 # 或者 docker rmi mysql

在使用 ID 对容器或镜像进行操作时,如果其他容器或镜像与要操作的容器或镜像的 ID 前几位不相同,可以使用 ID 的前几位代表整个 ID 来标识镜像。

例如,上面的 mysql 镜像的完整 IMAGE ID 为 f6509bac4980 ,如果这个时候其他镜像 IMAGE ID 的前4位与这个 mysql 镜像的前四位 f650 都不相同,那么我们可以直接使用 docker rmi f650 来删除这个镜像。这样做在很多时候都能够提高操作效率。

运行镜像

docker run 命令用于从镜像创建并启动一个新的容器。语法如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

下面是对常用参数的一些说明:

  • -d:后台运行容器并返回容器 ID。
  • -it:交互式运行容器,分配一个伪终端。(i参数)
  • --name:给容器指定一个名称。
  • -p:端口映射,格式为 host_port:container_port
  • -v:挂载卷,格式为 host_dir:container_dir
  • --rm:容器停止后自动删除容器。
  • --env-e: 为容器设置环境变量。
  • --network:指定容器的网络模式。
  • --restart:容器的重启策略(如 noon-failurealwaysunless-stopped)。
  • -u:指定运行容器的用户。

示例

现在,让我们来看一些具体的例子:

1. 基本用法

docker run ubuntu

拉取 ubuntu 镜像并在前台启动一个容器。

2. 后台运行容器

docker run -d ubuntu

在后台运行 ubuntu 容器并返回容器 ID。

3. 交互式运行并分配终端

docker run -it ubuntu /bin/bash

以交互模式运行 ubuntu 容器,并启动一个 Bash shell。

4. 指定容器名称

docker run --name my-container ubuntu

运行一个 ubuntu 容器,并将其命名为 my-container。

5. 端口映射

docker run -p 8080:80 nginx

将本地主机的 8080 端口映射到容器内的 80 端口,运行 nginx 容器。

6. 挂载卷

docker run -v /host/data:/container/data ubuntu

将主机的 /host/data 目录挂载到容器内的 /container/data 目录。

7. 设置环境变量

docker run -e MY_ENV_VAR=my_value ubuntu

设置环境变量 MY_ENV_VAR 的值为 my_value,运行 ubuntu 容器。

8. 使用网络模式

docker run --network host nginx

使用主机的网络模式运行 nginx 容器。

9. 指定重启策略

docker run --restart always nginx

设置容器的重启策略为 always,即使容器停止也会自动重启。

10. 指定用户

docker run -u user123 ubuntu

以 user123 用户的身份运行 ubuntu 容器。

11. 组合多个选项

docker run -d -p 8080:80 -v /host/data:/data --name webserver nginx

后台运行一个命名为 webserver 的 nginx 容器,将主机的 8080 端口映射到容器的 80 端口,并将主机的 /host/data 目录挂载到容器的 /data 目录。